package com.wang.aopdemo.aspecct;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;



/**
 * 日志切面类
 */
@Aspect //声明当前类是切面类
@Component //注入IOC容器中
public class LogAspect {
    /**
     * 1. 定义切点表达式
     * (让切面知道哪些方法是目标方法 --> 加了@LogAnnotation注解的方法)
     */
    @Pointcut("@annotation(com.wang.aopdemo.annotation.LogAnnotation)")
    public void logPointcut() {
        //
    }

    /**
     * 2. 定义通知方法
     * (插入到业务代码中的公共代码)
     */
    @Around("logPointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //日志输出
        String name = joinPoint.getSignature().getName();
        System.out.println("调用了" + name + "方法");
        return joinPoint.proceed();
    }
}
